{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2nqxFEmUEJtN"
      },
      "source": [
        "# Предварительная обработка текста на Python\n",
        "\n",
        "Курс \"[Подготовка школьников к участию в олимпиадах по искусственному интеллекту](https://edu.mipt.ru/ai/)\".\n",
        "\n",
        "Основные этапа предварительной обработки текста:\n",
        "- Токенизация\n",
        "- Фильтрация знаков препинания\n",
        "- Приведение слов к начальной форме\n",
        "- Удаление стоп-слов\n",
        "\n",
        "Рассматривается задача [Определение тональности отзывов на банки](https://cups.online/ru/tasks/2164).\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_jSiRE9RgcJr"
      },
      "source": [
        "Импортируем необходимые библиотеки"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "29_zjsOiEVbw"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import pymorphy3\n",
        "import nltk\n",
        "from nltk.tokenize import word_tokenize\n",
        "from nltk.corpus import stopwords\n",
        "import wget"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {},
      "outputs": [],
      "source": [
        "from tqdm.notebook import tqdm\n",
        "tqdm.pandas()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "7KYR3C6BnTZJ",
        "outputId": "5ca5a796-7ed4-4b9c-9bbb-63d2d2d3dd7c"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "[nltk_data] Downloading package punkt to\n",
            "[nltk_data]     C:\\Users\\sozyk\\AppData\\Roaming\\nltk_data...\n",
            "[nltk_data]   Package punkt is already up-to-date!\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "True"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "nltk.download('punkt')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2e6G1MDEf7cW"
      },
      "source": [
        "## Загружаем набор данных"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "7JXJr-AXgA6X",
        "outputId": "7c1448e4-2efe-4e84-f365-d39202a8815a"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'banks (1).csv'"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "wget.download('https://www.dropbox.com/scl/fi/mhiwx4plaua183bnuqt5e/train2.csv?rlkey=wv4dalbsutmzu5br9qv5ez21v&dl=1',\n",
        "              'banks.csv')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "knYGFy6FgY8t"
      },
      "source": [
        "## Загружаем данные в память\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "id": "i9XvxDmWhHPm"
      },
      "outputs": [],
      "source": [
        "banks = pd.read_csv('banks.csv', index_col='id');"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 455
        },
        "id": "f9arZwRagYTk",
        "outputId": "d6260ab2-4fe4-439b-e17a-bca11c66e279"
      },
      "outputs": [],
      "source": [
        "banks"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BEPXR3U7gAV6"
      },
      "source": [
        "## Токенизация текста"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "3MpIzueTnEeK"
      },
      "outputs": [],
      "source": [
        "text = banks.iloc[0]['text']"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 143
        },
        "id": "PhheVqTwnLzc",
        "outputId": "b5c60b82-8fda-4fbe-f466-bd70909dc837"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'В Альфа-Банке работает замечательная девушка - Ильясова Орна, вежливая, отзывчивая, действительно участвует в запросе клиента, я приходила к ней подряд ровно три дня, каждый день она помнила время моего прихода, помогла оформить кредит в размере 1млн рублей, когда я пришла с партнером (передавать ей полученный кредит за покупаемый мною авто), специалист Ильясова Орна помогла нам вывести всю сумму в один день (а это было непросто), так что сделка состоялась и все остались довольны! Моя знакомая в конце всего добавила: Теперь я \\xa0поняла, почему мы пришли в это отделение, к этой девушке..Побольше бы таких замечательных специалистов! Приобретать программу здоровье, и вообще все, что связано с Альфа-Банком, теперь буду только у нее!'"
            ]
          },
          "execution_count": 12,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "text"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "57YA9z_Am9IF"
      },
      "outputs": [],
      "source": [
        "tokens = word_tokenize(text.lower())"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qrblsP8Vnaoc",
        "outputId": "558a34db-180b-4126-f615-1641daa4c802"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['в',\n",
              " 'альфа-банке',\n",
              " 'работает',\n",
              " 'замечательная',\n",
              " 'девушка',\n",
              " '-',\n",
              " 'ильясова',\n",
              " 'орна',\n",
              " ',',\n",
              " 'вежливая',\n",
              " ',',\n",
              " 'отзывчивая',\n",
              " ',',\n",
              " 'действительно',\n",
              " 'участвует',\n",
              " 'в',\n",
              " 'запросе',\n",
              " 'клиента',\n",
              " ',',\n",
              " 'я',\n",
              " 'приходила',\n",
              " 'к',\n",
              " 'ней',\n",
              " 'подряд',\n",
              " 'ровно',\n",
              " 'три',\n",
              " 'дня',\n",
              " ',',\n",
              " 'каждый',\n",
              " 'день',\n",
              " 'она',\n",
              " 'помнила',\n",
              " 'время',\n",
              " 'моего',\n",
              " 'прихода',\n",
              " ',',\n",
              " 'помогла',\n",
              " 'оформить',\n",
              " 'кредит',\n",
              " 'в',\n",
              " 'размере',\n",
              " '1млн',\n",
              " 'рублей',\n",
              " ',',\n",
              " 'когда',\n",
              " 'я',\n",
              " 'пришла',\n",
              " 'с',\n",
              " 'партнером',\n",
              " '(',\n",
              " 'передавать',\n",
              " 'ей',\n",
              " 'полученный',\n",
              " 'кредит',\n",
              " 'за',\n",
              " 'покупаемый',\n",
              " 'мною',\n",
              " 'авто',\n",
              " ')',\n",
              " ',',\n",
              " 'специалист',\n",
              " 'ильясова',\n",
              " 'орна',\n",
              " 'помогла',\n",
              " 'нам',\n",
              " 'вывести',\n",
              " 'всю',\n",
              " 'сумму',\n",
              " 'в',\n",
              " 'один',\n",
              " 'день',\n",
              " '(',\n",
              " 'а',\n",
              " 'это',\n",
              " 'было',\n",
              " 'непросто',\n",
              " ')',\n",
              " ',',\n",
              " 'так',\n",
              " 'что',\n",
              " 'сделка',\n",
              " 'состоялась',\n",
              " 'и',\n",
              " 'все',\n",
              " 'остались',\n",
              " 'довольны',\n",
              " '!',\n",
              " 'моя',\n",
              " 'знакомая',\n",
              " 'в',\n",
              " 'конце',\n",
              " 'всего',\n",
              " 'добавила',\n",
              " ':',\n",
              " 'теперь',\n",
              " 'я',\n",
              " 'поняла',\n",
              " ',',\n",
              " 'почему',\n",
              " 'мы',\n",
              " 'пришли',\n",
              " 'в',\n",
              " 'это',\n",
              " 'отделение',\n",
              " ',',\n",
              " 'к',\n",
              " 'этой',\n",
              " 'девушке',\n",
              " '..',\n",
              " 'побольше',\n",
              " 'бы',\n",
              " 'таких',\n",
              " 'замечательных',\n",
              " 'специалистов',\n",
              " '!',\n",
              " 'приобретать',\n",
              " 'программу',\n",
              " 'здоровье',\n",
              " ',',\n",
              " 'и',\n",
              " 'вообще',\n",
              " 'все',\n",
              " ',',\n",
              " 'что',\n",
              " 'связано',\n",
              " 'с',\n",
              " 'альфа-банком',\n",
              " ',',\n",
              " 'теперь',\n",
              " 'буду',\n",
              " 'только',\n",
              " 'у',\n",
              " 'нее',\n",
              " '!']"
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "tokens"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "S4uWETC-pxk9"
      },
      "source": [
        "## Фильтрация знаков препинания"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "M9EQIyaSqjT5"
      },
      "outputs": [],
      "source": [
        "punctuation_marks = ['!', ',', '(', ')', ':', '-', '?', '.', '..', '...']"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "KVLPiRG_p4Dj"
      },
      "outputs": [],
      "source": [
        "only_words = []\n",
        "for token in tokens:\n",
        "    if token not in punctuation_marks:\n",
        "        only_words.append(token)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YnGcliN3qojl",
        "outputId": "20038d90-f87c-4ed0-fb06-f31814f52270"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['в',\n",
              " 'альфа-банке',\n",
              " 'работает',\n",
              " 'замечательная',\n",
              " 'девушка',\n",
              " 'ильясова',\n",
              " 'орна',\n",
              " 'вежливая',\n",
              " 'отзывчивая',\n",
              " 'действительно',\n",
              " 'участвует',\n",
              " 'в',\n",
              " 'запросе',\n",
              " 'клиента',\n",
              " 'я',\n",
              " 'приходила',\n",
              " 'к',\n",
              " 'ней',\n",
              " 'подряд',\n",
              " 'ровно',\n",
              " 'три',\n",
              " 'дня',\n",
              " 'каждый',\n",
              " 'день',\n",
              " 'она',\n",
              " 'помнила',\n",
              " 'время',\n",
              " 'моего',\n",
              " 'прихода',\n",
              " 'помогла',\n",
              " 'оформить',\n",
              " 'кредит',\n",
              " 'в',\n",
              " 'размере',\n",
              " '1млн',\n",
              " 'рублей',\n",
              " 'когда',\n",
              " 'я',\n",
              " 'пришла',\n",
              " 'с',\n",
              " 'партнером',\n",
              " 'передавать',\n",
              " 'ей',\n",
              " 'полученный',\n",
              " 'кредит',\n",
              " 'за',\n",
              " 'покупаемый',\n",
              " 'мною',\n",
              " 'авто',\n",
              " 'специалист',\n",
              " 'ильясова',\n",
              " 'орна',\n",
              " 'помогла',\n",
              " 'нам',\n",
              " 'вывести',\n",
              " 'всю',\n",
              " 'сумму',\n",
              " 'в',\n",
              " 'один',\n",
              " 'день',\n",
              " 'а',\n",
              " 'это',\n",
              " 'было',\n",
              " 'непросто',\n",
              " 'так',\n",
              " 'что',\n",
              " 'сделка',\n",
              " 'состоялась',\n",
              " 'и',\n",
              " 'все',\n",
              " 'остались',\n",
              " 'довольны',\n",
              " 'моя',\n",
              " 'знакомая',\n",
              " 'в',\n",
              " 'конце',\n",
              " 'всего',\n",
              " 'добавила',\n",
              " 'теперь',\n",
              " 'я',\n",
              " 'поняла',\n",
              " 'почему',\n",
              " 'мы',\n",
              " 'пришли',\n",
              " 'в',\n",
              " 'это',\n",
              " 'отделение',\n",
              " 'к',\n",
              " 'этой',\n",
              " 'девушке',\n",
              " 'побольше',\n",
              " 'бы',\n",
              " 'таких',\n",
              " 'замечательных',\n",
              " 'специалистов',\n",
              " 'приобретать',\n",
              " 'программу',\n",
              " 'здоровье',\n",
              " 'и',\n",
              " 'вообще',\n",
              " 'все',\n",
              " 'что',\n",
              " 'связано',\n",
              " 'с',\n",
              " 'альфа-банком',\n",
              " 'теперь',\n",
              " 'буду',\n",
              " 'только',\n",
              " 'у',\n",
              " 'нее']"
            ]
          },
          "execution_count": 17,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "only_words"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "B5JcVPtCsuhB"
      },
      "source": [
        "## Приводим слова к начальной форме"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "id": "E2RI64GztK1U"
      },
      "outputs": [],
      "source": [
        "morph = pymorphy3.MorphAnalyzer()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "id": "7ND7pHM2tOaf"
      },
      "outputs": [],
      "source": [
        "lemmas = []\n",
        "for token in only_words:\n",
        "    lemmas.append(morph.parse(token)[0].normal_form)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "x0_D7LWuu1jj",
        "outputId": "6575445c-843b-4df8-a266-bf5bfa0c63b7"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['в',\n",
              " 'альфа-банк',\n",
              " 'работать',\n",
              " 'замечательный',\n",
              " 'девушка',\n",
              " 'ильясова',\n",
              " 'орный',\n",
              " 'вежливый',\n",
              " 'отзывчивый',\n",
              " 'действительно',\n",
              " 'участвовать',\n",
              " 'в',\n",
              " 'запрос',\n",
              " 'клиент',\n",
              " 'я',\n",
              " 'приходить',\n",
              " 'к',\n",
              " 'она',\n",
              " 'подряд',\n",
              " 'ровно',\n",
              " 'три',\n",
              " 'день',\n",
              " 'каждый',\n",
              " 'день',\n",
              " 'она',\n",
              " 'помнить',\n",
              " 'время',\n",
              " 'мой',\n",
              " 'приход',\n",
              " 'помочь',\n",
              " 'оформить',\n",
              " 'кредит',\n",
              " 'в',\n",
              " 'размер',\n",
              " '1млн',\n",
              " 'рубль',\n",
              " 'когда',\n",
              " 'я',\n",
              " 'прийти',\n",
              " 'с',\n",
              " 'партнёр',\n",
              " 'передавать',\n",
              " 'она',\n",
              " 'получить',\n",
              " 'кредит',\n",
              " 'за',\n",
              " 'покупать',\n",
              " 'я',\n",
              " 'авто',\n",
              " 'специалист',\n",
              " 'ильясова',\n",
              " 'орный',\n",
              " 'помочь',\n",
              " 'мы',\n",
              " 'вывести',\n",
              " 'весь',\n",
              " 'сумма',\n",
              " 'в',\n",
              " 'один',\n",
              " 'день',\n",
              " 'а',\n",
              " 'это',\n",
              " 'быть',\n",
              " 'непросто',\n",
              " 'так',\n",
              " 'что',\n",
              " 'сделка',\n",
              " 'состояться',\n",
              " 'и',\n",
              " 'всё',\n",
              " 'остаться',\n",
              " 'довольный',\n",
              " 'мой',\n",
              " 'знакомый',\n",
              " 'в',\n",
              " 'конец',\n",
              " 'весь',\n",
              " 'добавить',\n",
              " 'теперь',\n",
              " 'я',\n",
              " 'понять',\n",
              " 'почему',\n",
              " 'мы',\n",
              " 'прислать',\n",
              " 'в',\n",
              " 'это',\n",
              " 'отделение',\n",
              " 'к',\n",
              " 'этот',\n",
              " 'девушка',\n",
              " 'большой',\n",
              " 'бы',\n",
              " 'такой',\n",
              " 'замечательный',\n",
              " 'специалист',\n",
              " 'приобретать',\n",
              " 'программа',\n",
              " 'здоровье',\n",
              " 'и',\n",
              " 'вообще',\n",
              " 'всё',\n",
              " 'что',\n",
              " 'связать',\n",
              " 'с',\n",
              " 'альфа-банк',\n",
              " 'теперь',\n",
              " 'быть',\n",
              " 'только',\n",
              " 'у',\n",
              " 'она']"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "lemmas"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KFWRRe_snqz5"
      },
      "source": [
        "## Удаление стоп слов"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "dGFcVEVIny2w",
        "outputId": "158dc046-1613-4c64-8dcf-48bebb03d7f6"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "[nltk_data] Downloading package stopwords to\n",
            "[nltk_data]     C:\\Users\\sozyk\\AppData\\Roaming\\nltk_data...\n",
            "[nltk_data]   Package stopwords is already up-to-date!\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "True"
            ]
          },
          "execution_count": 21,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "nltk.download('stopwords')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "meyfzDfSnuVr"
      },
      "outputs": [],
      "source": [
        "stop_words = stopwords.words(\"russian\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PLT--UDzpqN3",
        "outputId": "cd664a25-9556-490f-9c38-bdfd1a08b874"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['и',\n",
              " 'в',\n",
              " 'во',\n",
              " 'не',\n",
              " 'что',\n",
              " 'он',\n",
              " 'на',\n",
              " 'я',\n",
              " 'с',\n",
              " 'со',\n",
              " 'как',\n",
              " 'а',\n",
              " 'то',\n",
              " 'все',\n",
              " 'она',\n",
              " 'так',\n",
              " 'его',\n",
              " 'но',\n",
              " 'да',\n",
              " 'ты',\n",
              " 'к',\n",
              " 'у',\n",
              " 'же',\n",
              " 'вы',\n",
              " 'за',\n",
              " 'бы',\n",
              " 'по',\n",
              " 'только',\n",
              " 'ее',\n",
              " 'мне',\n",
              " 'было',\n",
              " 'вот',\n",
              " 'от',\n",
              " 'меня',\n",
              " 'еще',\n",
              " 'нет',\n",
              " 'о',\n",
              " 'из',\n",
              " 'ему',\n",
              " 'теперь',\n",
              " 'когда',\n",
              " 'даже',\n",
              " 'ну',\n",
              " 'вдруг',\n",
              " 'ли',\n",
              " 'если',\n",
              " 'уже',\n",
              " 'или',\n",
              " 'ни',\n",
              " 'быть',\n",
              " 'был',\n",
              " 'него',\n",
              " 'до',\n",
              " 'вас',\n",
              " 'нибудь',\n",
              " 'опять',\n",
              " 'уж',\n",
              " 'вам',\n",
              " 'ведь',\n",
              " 'там',\n",
              " 'потом',\n",
              " 'себя',\n",
              " 'ничего',\n",
              " 'ей',\n",
              " 'может',\n",
              " 'они',\n",
              " 'тут',\n",
              " 'где',\n",
              " 'есть',\n",
              " 'надо',\n",
              " 'ней',\n",
              " 'для',\n",
              " 'мы',\n",
              " 'тебя',\n",
              " 'их',\n",
              " 'чем',\n",
              " 'была',\n",
              " 'сам',\n",
              " 'чтоб',\n",
              " 'без',\n",
              " 'будто',\n",
              " 'чего',\n",
              " 'раз',\n",
              " 'тоже',\n",
              " 'себе',\n",
              " 'под',\n",
              " 'будет',\n",
              " 'ж',\n",
              " 'тогда',\n",
              " 'кто',\n",
              " 'этот',\n",
              " 'того',\n",
              " 'потому',\n",
              " 'этого',\n",
              " 'какой',\n",
              " 'совсем',\n",
              " 'ним',\n",
              " 'здесь',\n",
              " 'этом',\n",
              " 'один',\n",
              " 'почти',\n",
              " 'мой',\n",
              " 'тем',\n",
              " 'чтобы',\n",
              " 'нее',\n",
              " 'сейчас',\n",
              " 'были',\n",
              " 'куда',\n",
              " 'зачем',\n",
              " 'всех',\n",
              " 'никогда',\n",
              " 'можно',\n",
              " 'при',\n",
              " 'наконец',\n",
              " 'два',\n",
              " 'об',\n",
              " 'другой',\n",
              " 'хоть',\n",
              " 'после',\n",
              " 'над',\n",
              " 'больше',\n",
              " 'тот',\n",
              " 'через',\n",
              " 'эти',\n",
              " 'нас',\n",
              " 'про',\n",
              " 'всего',\n",
              " 'них',\n",
              " 'какая',\n",
              " 'много',\n",
              " 'разве',\n",
              " 'три',\n",
              " 'эту',\n",
              " 'моя',\n",
              " 'впрочем',\n",
              " 'хорошо',\n",
              " 'свою',\n",
              " 'этой',\n",
              " 'перед',\n",
              " 'иногда',\n",
              " 'лучше',\n",
              " 'чуть',\n",
              " 'том',\n",
              " 'нельзя',\n",
              " 'такой',\n",
              " 'им',\n",
              " 'более',\n",
              " 'всегда',\n",
              " 'конечно',\n",
              " 'всю',\n",
              " 'между']"
            ]
          },
          "execution_count": 23,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "stop_words"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "a7DNUl_Yn_CN"
      },
      "outputs": [],
      "source": [
        "filtered_words = []\n",
        "for token in lemmas:\n",
        "    if token not in stop_words:\n",
        "        filtered_words.append(token)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PU5ykRxhpsLY",
        "outputId": "4b7db604-9e88-4f7b-97df-59cf4eae5dc7"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['альфа-банк',\n",
              " 'работать',\n",
              " 'замечательный',\n",
              " 'девушка',\n",
              " 'ильясова',\n",
              " 'орный',\n",
              " 'вежливый',\n",
              " 'отзывчивый',\n",
              " 'действительно',\n",
              " 'участвовать',\n",
              " 'запрос',\n",
              " 'клиент',\n",
              " 'приходить',\n",
              " 'подряд',\n",
              " 'ровно',\n",
              " 'день',\n",
              " 'каждый',\n",
              " 'день',\n",
              " 'помнить',\n",
              " 'время',\n",
              " 'приход',\n",
              " 'помочь',\n",
              " 'оформить',\n",
              " 'кредит',\n",
              " 'размер',\n",
              " '1млн',\n",
              " 'рубль',\n",
              " 'прийти',\n",
              " 'партнёр',\n",
              " 'передавать',\n",
              " 'получить',\n",
              " 'кредит',\n",
              " 'покупать',\n",
              " 'авто',\n",
              " 'специалист',\n",
              " 'ильясова',\n",
              " 'орный',\n",
              " 'помочь',\n",
              " 'вывести',\n",
              " 'весь',\n",
              " 'сумма',\n",
              " 'день',\n",
              " 'это',\n",
              " 'непросто',\n",
              " 'сделка',\n",
              " 'состояться',\n",
              " 'всё',\n",
              " 'остаться',\n",
              " 'довольный',\n",
              " 'знакомый',\n",
              " 'конец',\n",
              " 'весь',\n",
              " 'добавить',\n",
              " 'понять',\n",
              " 'почему',\n",
              " 'прислать',\n",
              " 'это',\n",
              " 'отделение',\n",
              " 'девушка',\n",
              " 'большой',\n",
              " 'замечательный',\n",
              " 'специалист',\n",
              " 'приобретать',\n",
              " 'программа',\n",
              " 'здоровье',\n",
              " 'вообще',\n",
              " 'всё',\n",
              " 'связать',\n",
              " 'альфа-банк']"
            ]
          },
          "execution_count": 25,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "filtered_words"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Xjyhexm_wOxe"
      },
      "source": [
        "## Функция предварительной обработки"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "id": "bhnSU0F6wUZp"
      },
      "outputs": [],
      "source": [
        "def preprocess(text, stop_words, punctuation_marks, morph):\n",
        "    tokens = word_tokenize(text.lower())\n",
        "    preprocessed_text = []\n",
        "    for token in tokens:\n",
        "        if token not in punctuation_marks:\n",
        "            lemma = morph.parse(token)[0].normal_form\n",
        "            if lemma not in stop_words:\n",
        "                preprocessed_text.append(lemma)\n",
        "    return preprocessed_text"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "id": "Ic2qusuK7_3r"
      },
      "outputs": [],
      "source": [
        "punctuation_marks = ['!', ',', '(', ')', ':', '-', '?', '.', '..', '...']\n",
        "stop_words = stopwords.words(\"russian\")\n",
        "morph = pymorphy3.MorphAnalyzer()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GtFMs4_s1Y0i",
        "outputId": "f3706d03-4ea5-4b65-9a1a-1c30fe896226"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "75befe9b37d2487695ed1ff806d3d687",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "  0%|          | 0/5 [00:00<?, ?it/s]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "text/plain": [
              "id\n",
              "0    [альфа-банк, работать, замечательный, девушка,...\n",
              "1    [оформлять, рассрочка, м., видео, мег, тёплый,...\n",
              "2    [очень, порадовать, оперативность, работа, бан...\n",
              "3    [иметь, неосторожность, оформить, потреба, кре...\n",
              "4    [небольшой, предыстория, найти, сайт, mdm, бан...\n",
              "dtype: object"
            ]
          },
          "execution_count": 28,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "banks[0:5].progress_apply(lambda row: preprocess(row['text'], stop_words, punctuation_marks, morph), axis=1)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {
        "colab": {
          "background_save": true
        },
        "id": "4kCef9Kkx2ai"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "a1eb785261a1442d8af5a1f452710316",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "  0%|          | 0/13999 [00:00<?, ?it/s]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "banks['Preprocessed_texts'] = banks.progress_apply(lambda row: preprocess(row['text'], punctuation_marks, stop_words, morph), axis=1)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 629
        },
        "id": "RYwhoV3Z9vyx",
        "outputId": "d68d1c84-9e54-425b-9d05-6d84b53bdc37"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>text</th>\n",
              "      <th>label</th>\n",
              "      <th>Preprocessed_texts</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>id</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>В Альфа-Банке работает замечательная девушка -...</td>\n",
              "      <td>1</td>\n",
              "      <td>[альфа-банк, работать, замечательный, девушка,...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>Оформляя рассрочку в м. Видео в меге тёплый ст...</td>\n",
              "      <td>0</td>\n",
              "      <td>[оформлять, рассрочка, м., видео, мег, тёплый,...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Очень порадовала оперативность работы в банке....</td>\n",
              "      <td>1</td>\n",
              "      <td>[очень, порадовать, оперативность, работа, бан...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Имела неосторожность оформить потреб. кредит в...</td>\n",
              "      <td>0</td>\n",
              "      <td>[иметь, неосторожность, оформить, потреба, кре...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Небольшая предыстория: Нашел на сайте MDM банк...</td>\n",
              "      <td>0</td>\n",
              "      <td>[небольшой, предыстория, найти, сайт, mdm, бан...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13994</th>\n",
              "      <td>О высокой надёжности МКБ, порядочности и добро...</td>\n",
              "      <td>1</td>\n",
              "      <td>[высокий, надёжность, мкб, порядочность, добро...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13995</th>\n",
              "      <td>Обслуживаюсь в офисе на Чернореченской 42а, ка...</td>\n",
              "      <td>1</td>\n",
              "      <td>[обслуживаться, офис, чернореченский, 42а, физ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13996</th>\n",
              "      <td>Попала сегодня в очень неприятную ситуацию. Ре...</td>\n",
              "      <td>1</td>\n",
              "      <td>[попасть, сегодня, очень, неприятный, ситуация...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13997</th>\n",
              "      <td>Добрый день! Давно являюсь клиентом банка Русс...</td>\n",
              "      <td>1</td>\n",
              "      <td>[добрый, день, давно, являться, клиент, банк, ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13998</th>\n",
              "      <td>Сначала было все банально. Взял в кредит mp3 п...</td>\n",
              "      <td>0</td>\n",
              "      <td>[сначала, банально, взять, кредит, mp3, плеер,...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>13999 rows × 3 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "                                                    text  label  \\\n",
              "id                                                                \n",
              "0      В Альфа-Банке работает замечательная девушка -...      1   \n",
              "1      Оформляя рассрочку в м. Видео в меге тёплый ст...      0   \n",
              "2      Очень порадовала оперативность работы в банке....      1   \n",
              "3      Имела неосторожность оформить потреб. кредит в...      0   \n",
              "4      Небольшая предыстория: Нашел на сайте MDM банк...      0   \n",
              "...                                                  ...    ...   \n",
              "13994  О высокой надёжности МКБ, порядочности и добро...      1   \n",
              "13995  Обслуживаюсь в офисе на Чернореченской 42а, ка...      1   \n",
              "13996  Попала сегодня в очень неприятную ситуацию. Ре...      1   \n",
              "13997  Добрый день! Давно являюсь клиентом банка Русс...      1   \n",
              "13998  Сначала было все банально. Взял в кредит mp3 п...      0   \n",
              "\n",
              "                                      Preprocessed_texts  \n",
              "id                                                        \n",
              "0      [альфа-банк, работать, замечательный, девушка,...  \n",
              "1      [оформлять, рассрочка, м., видео, мег, тёплый,...  \n",
              "2      [очень, порадовать, оперативность, работа, бан...  \n",
              "3      [иметь, неосторожность, оформить, потреба, кре...  \n",
              "4      [небольшой, предыстория, найти, сайт, mdm, бан...  \n",
              "...                                                  ...  \n",
              "13994  [высокий, надёжность, мкб, порядочность, добро...  \n",
              "13995  [обслуживаться, офис, чернореченский, 42а, физ...  \n",
              "13996  [попасть, сегодня, очень, неприятный, ситуация...  \n",
              "13997  [добрый, день, давно, являться, клиент, банк, ...  \n",
              "13998  [сначала, банально, взять, кредит, mp3, плеер,...  \n",
              "\n",
              "[13999 rows x 3 columns]"
            ]
          },
          "execution_count": 30,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "banks"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.12.4"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
